iT邦幫忙

DAY 12
3

網站系統規劃實務系列 第 12

網站系統規劃 - 從 Excel 到資料庫,談聰明的人腦到憨直的 SQL

  • 分享至 

  • xImage
  •  

本篇文章作為第二週的第五篇,我們將進入 SQL 的世界,
本篇說明如何使用 phpmyadmin 進行資料庫 SQL 指令的執行以及 SQL 指令的介紹。

--------系列簡介--------

網站系統可說是現在最多學子與新人想要入門的一個領域,
這個原本屬於新興的領域,這幾年來也累積許多年的知識與 pattern ,
在有限的環境(stateless)與有限的伺服器端、瀏覽器資源下,
成為許多人進入程式的一塊入門鐵板(?)。

這個系列希望能夠就網站系統設計幾個門檻著手,
這是設定給初心者作為學習,給同好們作為回顧,

重新認識有關網站系統的每個環節。
本週相當的忙碌,寫得又是比較抽象的資料議題,
所以之前走向比偏向於基本的介紹,不過這篇就不能再偷懶了。XD

OK 我們來把昨天沒仔細講完的部份講完。:)


首先昨天我們提到資料庫、資料表,
另外我們一直沒有提到資料庫中最重要得細節部份, SQL 。

因為 SQL 對一般的狀況而言,是很多新手入門 Database 主要的門檻,
所以我們把這道主菜留到最後。

這一篇我們會仔仔細細的用 SQL 講完那些真正重要的基礎細節。(笑)

當然,為了讓你知道該怎麼執行,在最一開始的過程中,
我們先介紹該如何在 PHPMyAdmin 中執行 SQL:

1.先點進資料庫

2.點 SQL Table

3.輸入 SQL 指令,按下執行,檢視結果
(下圖以讀出所有資料表為例,語法為 "Show tables" 。)

就這麼簡單,另外當你點進資料庫執行 SQL 時,
有一道隱含的 SQL 指令是 "use testdatabase;"。

表示指定 testdatabase 進行查詢。 XD


好的,然後有關資料表,還有一件事情我們昨天還沒有提到:

1.資料表裡面我們多了一個 MissionId 欄位,
這是用來作為編號的,這是蠻常見的習慣。

(一般而言,依照增加的順序循序增加的數字,我們稱之為流水號。)

資料庫有一個設定叫做 AUTO_INCREMENT ,
可以自動讓一個欄位在新增時自動取得一個不重複的流水號。

假設我設定 MissionId 是 AUTO_INCREMENT ,
那我新增第一筆時,系統會自動設定該欄位為 1 ,
新增第二筆時,系統會自動設定該欄位為 2 ,以此類推。

有關 AUTO_INCREMENT ,可以參考這篇:
http://jiannrong.blogspot.tw/2008/02/mysqlautoincrement.html

另外一般而言,這個流水號也會是所謂的主鍵(Primary Key),
不過鍵(Key)、索引(Index) 這些麻煩事,

我們留到明後天在說,眼前我們先專注在基本的資料庫語法。

在這裡只要先瞭解 AUTO_INCREMENT 就可以了。:)

@ 有關資料庫,常常只是看文章很無聊?

那看這篇文章就對了,我們不只有概念介紹也可以有實務的操練。:)

在我們進行實務練習之前,我們先重新介紹,
我們目前用到的所有 SQL 操作指令:

1.建立資料庫 (這用管理工具建就夠了,實際上手打的機會其實不多。)

create database testdatabase;

2.建 messageboard 資料表

use testdatabase; -- 指定資料庫

CREATE TABLE `messageboard` (
  `messageID` bigint(20) NOT NULL AUTO_INCREMENT,
  `MessageCategory` bigint(20) DEFAULT NULL,
  `Author` varchar(100) NOT NULL,
  `UserId` bigint(20) NOT NULL,
  `Content` text NOT NULL,
  `postDate` date DEFAULT NULL,
  PRIMARY KEY (`messageID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

基本上筆者大部分建立資料表也是透過視覺工具多,
倒是修改 table 欄位時,才比較有機會下到 sql 指令。

這裡有些有關欄位的細節可以講,以這個為例:
Author varchar(100) NOT NULL,

* Author 是欄位名稱
* varchar(100) 是欄位型態
* NOT NULL 一定要給資料才能新增/編輯
* DEFAULT NULL 允許不給資料就能新增/編輯

@ 常用欄位型態列舉如下:

* bigint ,數字欄位常用這個,
* varchar 長度有限字串

後面括號裡面會接字串的長度,像是 varchar(100) 就是長度為一百的字串,
使用 varchar 時要知道你字串可能會有多長,如果輸入超過這長度的字串可能會被截短。

適合一兩千字以內的文字欄位。

* text 比較長的文字欄位或者採用 html 內容的欄位通常會用這個,可以容納幾萬字。

具體長度大小可以看這裡 http://www.electrictoolbox.com/maximum-length-mysql-text-field-types/

* date 日期欄位

* tinyint(1) ,常用來作為 boolean 用。( 0 是 false , 1 是 true)

* longblob 如果你想把 binary 的檔案放進資料庫,
就是這個選項了,但基本上不建議把檔案放進資料庫。

@ 欄位選用概念

1.處理欄位時,主要要考慮的是類型要合用、大小要適合,
原則上可以稍微略大一點是沒有關係,
但是欄位的大小也會影響資料庫實際的儲存空間大小,
如果濫用過頭,會造成無謂的浪費;所以請自行斟酌吧。

2.像數字基本上有分 tinyint , int , bigint ,
筆者的看法是 int 跟 bigint 差距不大,倒不如直接用 bigint 了。

欄位的類型實際上有非常多種,但選用時筆者是覺得在幾個常用選項中選擇就夠了。


好的,總算有比較正規的資料庫介紹了。XD

另外,雖然筆者實在是覺得就使用上去區分這個沒有意義,

不過還是要介紹,

一般把建立資料庫、資料表、鍵值,這種針對資料庫結構去作操作的 SQL 語法,
像是 CREATE TABLE 、CREATE DATABASE 、 ALTER TABLE ...etc

這些我們稱之為 DDL (data definition language),資料定義語言。

另外去新增 (Insert)、修改(Update) 資料表裡面的數據的,
我們稱之為 DML( Data Manipulation Language) ,資料處理語言。

不過筆者這些年來,是真的從來沒感覺到,
學會 DDL 跟 DML 這兩個名詞有什麼實質幫助過。XD


那在我們繼續之前,讓大家切切實實的感受一下資料庫的感受吧?

雖然前面已經教大家如何在 PHPMyAdmin 執行 SQL ,
但相信大家看文章時不一定會想開 PHPMyADMIN 起來,可能也有些人還沒裝,

所以接下來本週有關 database 操作的範例時,我們會採用 SQL Fiddle 這個線上服務進行操作。

(原則上第三週開始才會正式進入,真的要自己架設 apache / mysql /php 環境進行開發的進度。)

那我們就先用剛剛建立資料表的範例,先說明這個服務吧:

歡迎線上體驗:
http://sqlfiddle.com/#!2/a6094/1/0


很有趣吧? XD

接下來我們將繼續把之前文章介紹的留言板的表格一一實作完成,
然後並且將我們之前已經定義好得資料放進去:

所以接下來我們先逐步實作剩下的兩張表:

1.user 使用者表格

CREATE TABLE `user` (
  `UserId` bigint(20) NOT NULL AUTO_INCREMENT,  -- 使用者 ID
  `Name` varchar(30) NOT NULL,  -- 姓名
  `Email` varchar(150) NOT NULL,  
  PRIMARY KEY (`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

線上執行範例:http://sqlfiddle.com/#!2/6af62/1/0

2.MessageCategory 留言類別表格

CREATE TABLE `messagecategory` (
  `messageCategoryID` bigint(20) NOT NULL AUTO_INCREMENT, -- 類別ID
  `Name` varchar(50) NOT NULL,		-- 類別名稱
  PRIMARY KEY (`messageCategoryID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.接著我們來將之前的資料,寫成一筆一筆的新增語法,作為今天的結尾:

先來新增類別
1 生活
2 工作
3 聚會

insert into missioncategory values ('生活');
insert into missioncategory values ('工作');
insert into missioncategory values ('聚會');

線上操作連結: http://sqlfiddle.com/#!2/f15ce/2/0

接著新增使用者

線上操作連結: http://sqlfiddle.com/#!2/b6e78/1/0

最後新增 Messageboard 的資料

線上操作連結 http://sqlfiddle.com/#!2/93871/1/0


OK 我們已經完成了我們所需要的操作,
剩下更多的指令教學,明天再敘吧。;)


上一篇
網站系統規劃 - 資料庫聽起來很複雜很可怕?談資料庫環境建置
下一篇
網站系統規劃 - 資料庫語法應知
系列文
網站系統規劃實務27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
timloo
iT邦研究生 2 級 ‧ 2012-10-05 16:57:10

tony1223提到:
雖然前面已經教大家如何在 PHPMyAdmin 執行 SQL ,
但相信大家看文章時不一定會想開 PHPMyADMIN 起來,可能也有些人還沒裝,

所以接下來本週有關 database 操作的範例時,我們會採用 SQL Fiddle 這個線上服務進行操作。

SQL Fiddle ,現在學習任何事情,真得愈來愈方便了,
這麼多人體貼初學者,好感動。

雖然在ubuntu上裝 LAMP也降低很多難度了。
但是看到SQL Fiddle 還是讓人感動。

直接切入sql,不被枝節絆住。很多人可能真得phpadmin裝不起來!!就和mysql絕緣了!

0
Mr_White
iT邦見習生 ‧ 2017-07-05 18:22:54

我發現到3的部分有把messagecategory 寫成 missioncategory

我要留言

立即登入留言